在前幾天介紹完幾個常用的 Kubernetes 的元件後,想必讀者對 Kubernetes 有些基本了解。 今天我們將藉由這些元件,在 minikube 上架設 Wordpress。
若是還不太熟悉的讀者,不妨在開始今天實作之前,先來回顧一下幾個我們等等會使用的物件:
今天學習筆記內容如下:
小提醒:今天的程式碼都可以在 demo-wordpress 上找到。
Wordpress 是一個可以協助開發者快速架設好一個網站的軟體。Wordpress 是開源的,以 PHP 和 MySQL 為主要架構。除了提供開發者許多外掛以及主題來打造個人 Blog、商業網站之外,Wordpress 本身還提供一個好用的後台,方便網站管理者修改、編輯文件。若是對於 Wordpress 還想暸解更多的讀者,不妨參考 Wordpress 新手教學文件。
若有印象 第四天學習筆記介紹到的 Docker Hub,應該還記得 Docker Hub 上有者許多開源軟體提供的 Docker Image,而 Wordpress 官方 也有提供 Docker Image 讓開發者使用。
在 Docker Hub for Wordpress 頁面中,可以找到 Wordpress Image 中可設定的環境變數(Environment Variables)
的介紹。在稍後我們會透過 Secret 物件,將我們設定的環境變數傳給 Wordpress container。
正如 前言 提到,Wordpress 是 PHP 以及 MySQL 為主要架構的軟體。在 Wordpress Image 中提供了 PHP 的部分,MySQL server 則需要額外架設。
在這次範例中,我們將使用官方提供的 MySQL Docker Image,來存放 Wordpress 中的所有資料。
在 Docker Hub for MySQL 頁面 底下,也可以看到 Environment Variables
的介紹。
首先,用 kubectl get nodes
確認目前 minikube 的運行狀態
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready <none> 1d v1.8.0
接著,我們需要創建一個 Secret 物件,裡面存放著 Wordpress application 存取 MySQL server 的密碼,以 wordpress-secret.yaml 為例:
apiVersion: v1
kind: Secret
metadata:
name: wordpress-secret
type: Opaque
data:
# echo -n "rootpass" | base64
db-password: cm9vdHBhc3M=
透過 kubectl create
創建 wordpress-secret,
$ kubectl create -f ./wordpress-secret.yaml
secret "wordpress-secret" created
接下來使用 my-wordpress-deploy.yaml 創建一個 Deployment 物件去管理 Wordpress 服務, 內容如下:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: wordpress-app
spec:
replicas: 1
selector:
matchLabels:
app: wordpress-deployment
template:
metadata:
labels:
app: wordpress-deployment
spec:
containers:
- name: wordpress
image: wordpress:4-php7.0
ports:
- name: wordpress-port
containerPort: 80
env:
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wordpress-secret
key: db-password
- name: WORDPRESS_DB_HOST
value: 127.0.0.1
- name: mysql
image: mysql:5.7
ports:
- name: mysql-port
containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: wordpress-secret
key: db-password
在這個 wordpress-deployment
物件中,我們有兩個 container,分別是 Wordpress application 與 MySQL server。
在 Wordpress Docker Image 介紹中表示,開發者若無指定 WORDPRESS_DB_USER
,則連結到 MySQL server 的 user 預設為 root
在 MySQL Docker Image 介紹中表示,可以透過 MYSQL_ROOT_PASSWORD
設定 root
帳號的密碼
因此,我們只需將 MySQL Docker Image 的 MYSQL_ROOT_PASSWORD
與 Wordpress Docker Image 中的 WORDPRESS_DB_PASSWORD
設置相同的密碼。Wordpress Container 就會以 root 身份連結到 MYSQL server container
我們將 Database 的密碼存在 wordpress-secret
中,並將密碼設置成 環境變數
Pod 中的 container 都會透過 localhost + port number 互相溝通,所以 Wordpress container 會透過 127.0.0.1:3306 去訪問 MySQL server container
第一次 pull Image 需要較久的時間,可以用 kubectl describe
查看各個物件的狀態
接著,還需要創建一個 Service 物件,讓本機端的瀏覽器也可以訪問到 Kubernetes Cluster 中的 wordpress-deployment
物件。wordpress-service.yaml 設定如下:
apiVersion: v1
kind: Service
metadata:
name: wordpress-service
spec:
ports:
- port: 3000
nodePort: 30300
protocol: TCP
targetPort: wordpress-port
selector:
app: wordpress-deployment
type: NodePort
透過 kubectl create
創建 wordpress-service ,
$ kubectl create -f ./wordpress-service.yaml
service "wordpress-service" created
最後,我們可以用 kubectl get all
來看一下目前所有物件的狀況,
當所有物件都 READY
時,透過 minikube service
指令找到 wordpress-service
的 url,
$ minikube service wordpress-service --url
http://192.168.99.100:30300
打開本機端的瀏覽器輸入 http://192.168.99.100:30300
便可以看到 Wordpress application 的設定頁面。選擇好自己所需的語言後,點選繼續,會進到使用者登入設定頁面,將 網站名稱
、使用者帳號
、使用者密碼
,以及 使用者email
都輸入之後,往下點選 Install Wordpress
進到登入頁面後,此時再輸入剛剛設定的帳號密碼,輸入完畢後點選 Login,
登入之後,便可以看到 Wordpress 的後台管理。點選左上角的 My Blog
可以進入到首頁。在首頁上,可以看到我們剛剛設置好的使用者帳號與網站 title,
如此,我們就在 Kubernetes Cluster 中,利用 Wordpress Docker Image 與 MySQL Docker Image 架設好個人 Blog 網站了。
讀者不妨在 Wordpress 上試試看如何編輯或新增文章。更多有關 Wordpress 的教學,可參考 該連結
最後但也最重要的是,由於 MySQL 的資料都是存在 container 中,若是 Pod 不小心 crash 或是其他因素遭刪除,我們在 Wordpress 後台編輯的資料也會跟著遺失。因此在 [Day 20] 如何保存我的資料 - Volumes 的學習筆記中,筆者也將會與大家詳細介紹如何透過 Volumes 保存 Pod 中的資訊。
希望透過今天在 minikube 上架設 Wordpress 的分享,能幫助讀者更熟悉 Kubernetes 的基本操作。而在往後的學習筆記中,筆者將介紹,如何透過第三方套件 kops ,在AWS 上架設 Kubernetes Cluster,讓實作更貼近於一般的實際場景。
依舊歡迎大家給予建議與討論,如果能按個讚給些鼓勵也是很開心唷 : )
學到了在minikube上架設WP。謝謝版主分享:)
我們常說的WordPress,其實有三種:
WP入門者,除了在WordPress.org的Codex學習之外,這裡有篇圖文教學:
透過實作,你將學會如何安裝主題、外掛甚至購物車。文末更有WordPress搬家,及「角色權限」管理。
教學大綱:
- 如何架設網站
- FTP上傳WordPress
- File Manager(可選)
- 建立資料庫
- 安裝WordPress
- 登入WordPress
- 固定網址設定
- 頁面 vs. 文章
- 新增頁面
- 新增媒體
- WordPress主題
- 付費版型
- 安裝第三方主題
- 發表文章
- 如何截短文章
- WordPress文章摘要
- 嵌入影音媒體
- 外觀 > 自訂
- 設定WordPress選單
- 修改小工具
- 網站圖示 & Logo
- 首頁設定
- CSS編輯器
- WordPress留言板
- Gravatar 大頭貼
- 安裝外掛
- 必裝外掛推薦
- WordPress購物車
- 搬家&備份外掛
- WordPress角色權限
- 權限設定技巧
- 新增WP帳號
希望此圖文教學,能幫助WP入門新手~
感謝 @peter_fu 分享!! 介紹超詳細的 XD
我也對 WorldPress 有更進一步的認識了!!
哈囉,有個問題想要請教一下,我成功的建立了這個範例
然後我用[Day 12]的方法進入機器,也就是下面這段語法
kubectl exec -it wordpress-app-55765787f4-2dpfx -- /bin/bash
如果我的理解沒有錯的話,這是Pod內wordpress那個container,
我想請問,如果我想進去mysql,如下圖,該如何進去呢?謝謝您
mysql>
補充:
剛剛看到[Day 17]
因為產生2個pod分別為wordpress跟mysql-server
所以透過 kubectl exec -it mysql-server -- /bin/bash
可以順利進去mysql,不過還是想知道,如果只有一個pod,產生兩個container,
該怎麼進去mysql。
答案:自問自答XD 參考這邊
kubectl exec -it <podname> -c mysql -- /bin/bash
Hi @changec
是的沒錯 XD,抱歉現在才看到...太不常登這個帳號了 XD
哈囉您好,有一問題想請教,如果我在本機端A成功連進wordpress了,
有什麼辦法讓同一網域的其他電腦或是手機也可以連進A呢
如果是同網域的話,可以查看一下本機端 A 的 private ip, 通常為 10.0 或 192.168 等開頭。通常若無其他防火牆設定,其他設備端可以直接透過該 private ip 直接與本機端 A 相連。